package com.hzvtc.myproject.vo;

import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 返回结果封装类
 * @param <T> 返回数据的类型
 */
@Data
@Accessors(chain = true)
public class Result<T> {
    private Integer statusCode;
    private String msg;
    private T data;

    /**
     * 创建一个成功的结果对象并设置消息
     * @param msg 消息
     * @param <T> 返回数据的类型
     * @return 成功的结果对象
     */
    public static <T> Result<T> ok(String msg) {
        Result<T> result = new Result<>();
        result.statusCode = 200;
        result.msg = msg;
        return result;
    }

    /**
     * 创建一个成功的结果对象
     * @param <T> 返回数据的类型
     * @return 成功的结果对象
     */
    public static <T> Result<T> ok() {
        Result<T> result = new Result<>();
        result.statusCode = 200;
        result.msg = "请求成功";
        return result;
    }

    /**
     * 创建一个失败的结果对象并设置状态码和消息
     * @param statusCode 状态码
     * @param msg 消息
     * @param <T> 返回数据的类型
     * @return 失败的结果对象
     */
    public static <T> Result<T> fail(Integer statusCode, String msg) {
        Result<T> result = new Result<>();
        result.statusCode = statusCode;
        result.msg = msg;
        return result;
    }

    /**
     * 设置返回数据并返回结果对象本身
     * @param data 返回数据
     * @return 结果对象本身
     */
    public Result<T> add(T data) {
        this.data = data;
        return this;
    }
}
